package com.spark.concurrency.other;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * 线程不安全的，
 */
public class ArrayListTest {
    private static final ArrayList<String> arrayList = new ArrayList<>();

    public static void main(String[] args) throws InterruptedException {
        arrayList.add("hello");
        arrayList.add("alibaba");
        arrayList.add("to");
        arrayList.add("hangzhou");

        Thread thread = new Thread(() -> {
            arrayList.set(1, "baba"); //——修改元素
            arrayList.remove(1); //——删除元素
            arrayList.remove(2);
        });
        Iterator<String> iterator = arrayList.iterator(); //——保证在修改线程启动前获取迭代器
        thread.start(); //——启动线程
        thread.join(); //——等待子线程执行完毕
        while (iterator.hasNext()) { //——迭代元素
            //一初始的时候，就会赋值大小给expectedModCount，然后又获取的时候，又会拿当前的modCount进行比较，
            // 因为上面有删除操作，所以会失败，
            System.out.println(iterator.next());
        }
    }
}